package com.briup.backUp.Impl;

import com.briup.Logger.Impl.LogImpl;
import com.briup.Logger.Log;
import com.briup.backUp.Backup;
import org.apache.log4j.Logger;

import java.io.*;

public class BackupImpl implements Backup {
    //private Log log=new LogImpl();
    private Logger log= Logger.getLogger("com.briup.backUp.Impl.BackupImpl");
    /**
     * 加载备份文件，获取文件中存在的对象信息
     * filePath ： 本份文件的资源路径1
     * flag : 是否删除备份文件
     */
    @Override
    public Object load(String filePath, boolean flag) {
        //创建file对象
        File file = new File(filePath);
        //判断备份文件是否存在
        //文件不存在则创建
        if (!file.exists()) {
            try {
                //创建文件
                file.createNewFile();
            } catch (IOException e) {
                log.error("备份文件创建失败...");
            }
        }
        //从备份文件中读取对象 声明对象输入流
        ObjectInputStream ois = null;
        //声明获取的对象
        Object object = null;
        try {
            //创建对象输入流
            ois=new ObjectInputStream(new FileInputStream(filePath));
            object = ois.readObject();
            log.info("成功读取备份文件");

        } catch (Exception e) {
            log.info("第一次读取入库备份文件，文件为空！");
        }finally {
            if(ois!=null){
                try {
                    ois.close();
                } catch (IOException e) {
                   log.error("关闭资源失败！（备份模块load方法）异常");
                }
            }
        }
        //根据删除标志 删除备份文件
        if (flag) {
            if(file.exists()){
                //存在则删除
                file.delete();
            }
        }
        return object;
    }


    @Override
    public void save(String filePath, boolean append, Object object) {
        /**
         * 将需要备份的数据存储在指定的备份文件中
         * filePath : 备份文件路径
         * append : 是否追加存储
         */
        File file = new File(filePath);
        //声明流
        ObjectOutputStream oos = null;
        try {
            //定义流
            oos=new ObjectOutputStream(new FileOutputStream(filePath,append));
            oos.writeObject(object);
        } catch (IOException e) {
            log.error("备份文件失败！");
            //log.error(e.getMessage());
        }finally {
            if(oos!=null){
                try {
                    oos.close();
                } catch (IOException e) {
                    log.error("关闭资源失败！");
                }
            }
        }
    }
}
